#ifndef TEST_APPLICATION_WIN32_WINDOW_H
#define TEST_APPLICATION_WIN32_WINDOW_H

#include <windows.h>

#include "engine/application_state.h"
#include "engine/window_wrapper.h"
#include "engine/result_codes.h"
#include "engine/kernel.h"
using namespace engine;

namespace test_application {

class Win32Window : public WindowWrapper {
public:
    Win32Window(ApplicationState & state);
    ~Win32Window(){UnregisterClass(TEXT("Win32Window"), instance_handle_);}
    int DoEvents();
private:
    static LRESULT	CALLBACK MessageHandler(HWND, UINT, WPARAM, LPARAM);
    static bool keys[256];
    HWND window_handle_;	// Holds Our Window Handle
    HINSTANCE instance_handle_;	// Holds The Instance Of The Application 

    virtual int OnInitialize();
    virtual int OnClose();
    virtual int OnToFullscreen(){ return OnInitialize(); }
    virtual int OnToWindowed(){ return OnInitialize(); }
    virtual int OnResize(const long & width, const long & height);
};

}



#endif //TEST_APPLICATION_WIN32_WINDOW_H